#include <bits/stdc++.h>
using namespace std;
const int N=1e3+50;
const unsigned int BASE1=10016957;
const unsigned int BASE2=10016957;
const int MOD=99999997;
int m,n,a,b,q;
unsigned int Hash[N][N],_hash[N][N];
unsigned int pow1[N],pow2[N];
bool Set[100000000];
int getHash(){
    for(int i=1;i<=a;i++){
        for(int j=1;j<=b;j++){
            _hash[i][j]+=_hash[i-1][j]*BASE1;
        }
    }
    for(int i=1;i<=a;i++){
        for(int j=1;j<=b;j++){
            _hash[i][j]+=_hash[i][j-1]*BASE2;
        }
    }
    return _hash[a][b];
}
int main(void){
    scanf("%d%d%d%d",&m,&n,&a,&b);
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            scanf("%1d",&Hash[i][j]);
        }
    }
    pow1[0]=pow2[0]=1;
    for(int i=1;i<=100;i++){
        pow1[i]=pow1[i-1]*BASE1;
        pow2[i]=pow2[i-1]*BASE2;
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            Hash[i][j]+=Hash[i-1][j]*BASE1;
        }
    }
    for(int i=1;i<=m;i++){
        for(int j=1;j<=n;j++){
            Hash[i][j]+=Hash[i][j-1]*BASE2;
        }
    }
    for(int i=a;i<=m;i++){
        for(int j=b;j<=n;j++){
            unsigned int h=Hash[i][j];
            h-=Hash[i-a][j]*pow1[a];
            h-=Hash[i][j-b]*pow2[b];
            h+=Hash[i-a][j-b]*pow1[a]*pow2[b];
            Set[h%MOD]=true;
        }
    }
    //printf("True\n");
    scanf("%d",&q);
    while(q--){
        for(int i=1;i<=a;i++){
            for(int j=1;j<=b;j++){
                scanf("%1d",&_hash[i][j]);
            }
        }
        if(Set[getHash()%MOD]){
            printf("1\n");
        }else{
            printf("0\n");
        }
    }
    return 0;
}